package main

import "fmt"

//@brief 最简化版冒泡排序
//		1、每轮执行，把集合最小的元素，放最左边
//		2、缩小集合范围，把最左边的排除出集合
//		3、重复执行以上 “1” 和 “2” ，知道集合只剩1个元素；此时排序已经完成
func bubbleSort(arr []int) []int {
	if len(arr) == 0 {
		return arr
	}
	for i := 0; i < len(arr); i++ {
		for j := i + 1; j < len(arr); j++ {
			if arr[i] > arr[j] {
				arr[j], arr[i] = arr[i], arr[j]
			}
		}
	}
	return arr
}

func main() {
	fmt.Printf("bubbleSort start\n")
	arrInit := []int{3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9, 3, 2, 3, 8, 4, 6, 2, 6, 4, 3, 3, 8, 3, 2, 7, 9, 5, 0, 2, 8, 8}
	fmt.Printf("arrInit:%v\n", arrInit)

	arrSorted := bubbleSort(arrInit)
	fmt.Printf("arrSorted:%v\n", arrSorted)

	arrSorted = bubbleSort1(arrInit)
	fmt.Printf("arrSorted:%v\n", arrSorted)

}

//@brief 常规冒泡排序
func bubbleSort1(arr []int) []int {
	if len(arr) == 0 {
		return arr
	}
	for i := 0; i < len(arr)-1; i++ {
		if arr[i] > arr[i+1] {
			arr[i], arr[i+1] = arr[i+1], arr[i]
		}
	}
	return arr
}
